package com.demo.webautotest;

import com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutor;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class WebAutoTest2 {
    public static void main(String[] args) throws InterruptedException {
        //ChromeDriver chromeDriver = openChrome();
        FirefoxDriver chromeDriver = openFireFox();
        //select下拉框处理
/*        chromeDriver.get("D:\\projects\\20220330Project\\learn-test\\src\\test\\java\\com\\demo\\html\\select.html");
//        chromeDriver.findElement(By.xpath("//div[@id='ul']/a[text()='设置']")).click();
//        chromeDriver.findElement(By.xpath("//a[text()=='高级搜索']")).click();
        Thread.sleep(2000);
        //定位到下拉框
        WebElement webelement = chromeDriver.findElementByName("platform");
        //把 WebEelement 封装成select对象
        Select select = new Select(webelement);
        //切换select选项
        select.selectByValue("plpl");
        select.selectByVisibleText("漂漂");*/


        //时间日期的控件
/*        chromeDriver.get("https://www.fliggy.com/?ttid=seo.000000574&seoType=origin");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
        chromeDriver.findElement(By.xpath("//form[@id='J_FlightForm']//input[@name='depDate']")).sendKeys(simpleDateFormat.format(new Date()));
        */
        //js的方式
        chromeDriver.get("https://www.12306.cn/index/");
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) chromeDriver;
        javascriptExecutor.executeAsyncScript("document.getElementById(\"train_date\").removeAttribute(\"readonly\")");
        Thread.sleep(1000);
        chromeDriver.findElement(By.id("train_date")).clear();
        Thread.sleep(1000);
        chromeDriver.findElement(By.id("train_date")).sendKeys("2022-09-05");


        //----------------------------------------------
        //*[@id="root"]/div[2]/div/div[3]/div[1]/input
        //#root > div.jsx-550629572.login-layout > div > div.jsx-550629572.form-layout > div:nth-child(1) > input
       // chromeDriver.findElement(By.cssSelector("input[placeholdler='请输入手机号']")).sendKeys("17878253900");
/*        WebDriverWait webdriverWait1 = new WebDriverWait(chromeDriver,2);
        webdriverWait1.until(ExpectedConditions.visibilityOf(chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[1]/input"))));
        chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[1]/input")).sendKeys("17878253988");
        chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[2]/div")).click();
        webdriverWait1.until(ExpectedConditions.visibilityOf(chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[2]/input"))));
        String code = chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[2]/div")).getText();
        String phone = chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[1]/input")).getText();
        if (!StringUtils.isEmpty(code) && !StringUtils.isEmpty(phone)) {

            chromeDriver.findElement(By.xpath("//*[@id=\"root\"]/div[2]/div/div[3]/div[2]/input")).click();
        } else {
            System.out.println("00000000000000000必填项");
        }
        WebDriverWait webdriverWait = new WebDriverWait(chromeDriver,2);
        Boolean until1 = webdriverWait.until(ExpectedConditions.invisibilityOf(chromeDriver.findElement(By.cssSelector("input[placeholdler='验证码']"))));
        System.out.println("until1==="+until1);
        //定位百度的搜索框元素 并输入王一博
        chromeDriver.findElement(By.id("kw")).sendKeys("王一博");
        //定位百度的搜索框元素并且输入数据（Name定位）--重复问题
        chromeDriver.findElement(By.name("wd")).sendKeys("王一博");
        System.out.println(chromeDriver.getTitle().toString());
        for (String str: chromeDriver.getWindowHandles()) {
            System.out.println("+=========="+str);
        }
        chromeDriver.getWindowHandles().stream().forEach(System.out::println);
         chromeDriver.findElementById("su").click();
        //定位百度的搜索框元素，并且输入数据（tagName） --找到的元素回事有多个--不推荐
       // chromeDriver.findElement(By.tagName("input")).sendKeys("王一博");
        //定位百度的搜索框元素 并且输入数据（className定位）
       // chromeDriver.findElement(By.className("s_pt")).sendKeys("王一博");
        //comppound class names not permitted -->符合类名问题
       // chromeDriver.findElement(By.className("bg s_btn")).click();
        //定位 新闻元素 并且点击（LinkText定位） --超链接完整文本
      // chromeDriver.findElement(By.linkText("新闻")).click();
        //定位 新闻元素 并且点击（partialLinkText定位） ---超链接部分文本
       //chromeDriver.findElement(By.partialLinkText("新闻")).click();





        //cssSelector元素定位
        //1） tagName定位
        chromeDriver.findElement(By.cssSelector("input"));
        //2) id定位
        chromeDriver.findElement(By.cssSelector("#ke")).sendKeys("王一博");
        //3）className定位
        chromeDriver.findElement(By.cssSelector(".s_ipt")).sendKeys("王一博");
        //多个className定位组合的吗
        chromeDriver.findElement(By.cssSelector(".bg.s_btn")).click();


        //精确定位
        chromeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("王一博");
        //多属性定位
        chromeDriver.findElement(By.cssSelector("input[maxlength='255'][autocomplete='off']")).sendKeys("王一博");


        chromeDriver.findElement(By.id("kw")).sendKeys("123456");
        Thread.sleep(3000);
        chromeDriver.findElement(By.id("kw")).clear();//清除
        WebElement webElement = chromeDriver.findElement(By.id("kw"));
        System.out.println("得到元素的标签名："+webElement.getTagName());
        System.out.println("得到元素的maxlength属性："+webElement.getAttribute("maxlength"));
        WebElement element = chromeDriver.findElement(By.xpath("//a[text() == 'hao123']"));
        System.out.println("得到元素的文本值="+element.getText());
        System.out.println("元素是否显示="+element.isDisplayed());

        String currentUrl = chromeDriver.getCurrentUrl();
        System.out.println("获取当前页面的地址url="+currentUrl);
        //获取当前的面便的标题
        System.out.println("当前的标题为="+chromeDriver.getTitle());
        //获取当前页面源代码
        System.out.println("当前页面源代码："+chromeDriver.getPageSource());
             //quit 关闭驱动对象以及所有相关的窗口
        chromeDriver.quit();
        //close() 关闭当前窗口
        chromeDriver.findElement(By.id("kw")).sendKeys("王一博");
        chromeDriver.findElement(By.id("su")).click();
        Thread.sleep(1000);
        chromeDriver.findElement(By.xpath("//a[text()=='官方']")).click();
        Thread.sleep(3000);
        chromeDriver.close();//即使通过一个窗口打开多个川口，还是只是关闭第一个窗口
        System.out.println("新窗口打开前的句柄："+chromeDriver.getWindowHandle());
        System.out.println("新窗口打开前的所有句柄："+chromeDriver.getWindowHandles());
        Thread.sleep(1000);
        System.out.println("新窗口打开后的句柄："+chromeDriver.getWindowHandle());
        System.out.println("新窗口打开后的所有句柄："+chromeDriver.getWindowHandles());
        //getWindowHandle（） 返回当前页面的句柄
        //getWindowHandles()
        //返回所有由驱动对象打开页面的所有句柄 ，页面不同，句柄不一样
        //manage()
        //此方法可以获取Options --浏览器菜单操作对象
        //driver.manage().window()
        WebDriver.Options manage = chromeDriver.manage();
        Dimension dimension = manage.window().getSize();
        System.out.println("窗口的高度="+dimension.getHeight());
        System.out.println("窗口的宽度="+dimension.getWidth());
        System.out.println(manage.window().getPosition().getY());
        System.out.println(manage.window().getPosition().getX());


        //navigate对象
        WebDriver.Navigation navigate = chromeDriver.navigate();
        Thread.sleep(2000);
        //访问jd
        navigate.to("https://www.jd.com");
        Thread.sleep(2000);
        //刷新网页
        navigate.refresh();
        //回退
        Thread.sleep(2000);
        navigate.back();
        //前进
        Thread.sleep(2000);
        navigate.forward();

        //硬性等待
        Thread.sleep(1000);
        //隐士等待
        chromeDriver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
        //显示等待
        WebDriverWait webDriverWait = new WebDriverWait(chromeDriver,2);
        WebElement until = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='王一博']")));
        System.out.println(until.getText());

        //iframe处理
        chromeDriver.get("D:\\a.html");
        //在默认的页面去找输入框输入数据
        chromeDriver.findElement(By.id("aa")).sendKeys("111");
        Thread.sleep(2000);
        //进入第一个内嵌页面中定位元素，输入数据
        //切换iframe
        WebDriver bframe = chromeDriver.switchTo().frame("bframe");
        chromeDriver.findElement(By.id("bb")).sendKeys("222");
        Thread.sleep(2000);
        //进入第二个内嵌页面中定位元素，输入数据
        WebDriver cframe = chromeDriver.switchTo().frame("cframe");
        chromeDriver.findElement(By.id("cc")).sendKeys("333");
        Thread.sleep(2000);
        //回到默认页面
        chromeDriver.switchTo().defaultContent();
        chromeDriver.findElement(By.id("aa")).sendKeys("回到默认页面中");


         //window窗口处理
        chromeDriver.get("D:\\a.html");
        chromeDriver.findElement(By.id("aa")).sendKeys("这个是第一个窗口");
        System.out.println("跳转前的窗口句柄"+cframe.getWindowHandle());
        Thread.sleep(2000);
        //切换导b窗口
        chromeDriver.findElement(By.id("bb")).click();
        //虽然页面已经导了b窗口 但是句柄还是在a窗口中，所以你操作的还是a窗口
        Thread.sleep(2000);
        System.out.println("跳转后的窗口句柄"+cframe.getWindowHandle());
        //句柄的切换
        //进入b窗口之后，后去导所有窗口的句柄
        Set<String> handles = chromeDriver.getWindowHandles();
        //对窗口集合进行遍历
        for (String handler: handles) {
            //切换句柄
            chromeDriver.switchTo().window(handler);
            //如何知道是窗口b的句柄呢？
            if(chromeDriver.getTitle().equals("b.thml")){
                //如果标题符合则跳出循环
                break;
            }
        }*/

    }
    public static void openIE(){
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        //忽略保护模式的设置
        desiredCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
        //忽略缩放的设置
        desiredCapabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING,true);
        InternetExplorerDriver internetExplorerDriver = new InternetExplorerDriver();
        //访问百度
        internetExplorerDriver.get("https://www.baidu.com");

    }
    public static ChromeDriver openChrome(){
        //打开chrome浏览器
        System.setProperty("webdriver.chrome.driver","src/main/resources/driver/chromedriver.exe");

        ChromeDriver chromeDriver = new ChromeDriver();
        //访问百度
        chromeDriver.get("https://www.baidu.com");
        return chromeDriver;
    }

    public static FirefoxDriver openFireFox(){
        //火狐浏览器的exe文件地址路径
        System.setProperty("webdriver.firefox.bin","D:\\software\\火狐\\firefox.exe");
       // System.setProperty("webdriver.firefox.bin","firefox的执行文件exe地址");
        //驱动路径
        System.setProperty("webdriver.gecko.driver","src/main/resources/driver/geckodriver.exe");
       //System.setProperty("webdriver.gecko.driver","firefox的驱动地址");
        //打开浏览器
        FirefoxDriver firefoxDriver = new FirefoxDriver();
//        firefoxDriver.get("https://www.baidu.com");
        firefoxDriver.get("https://testlive.pp.suishoubo666.com/");
        return firefoxDriver;
    }
}
